package http

import "net/http"

// LinkHTTP 链接
type LinkHTTP struct {
	w http.ResponseWriter
	r *http.Request
}

// Routing 路由
// 	注:
//		这里定义的是路由可用的定义与路由模块定义并非完全相同
//		路由模块的定义值可能是直接赋值给 Routing 函数返回
//		也有可能为路由模块本身的处理使用的定义值
type Routing struct {
	Path   string // 目标路径
	RegExp bool   // 正则匹配
	// 访问限制
	VisitLimit      VisitLimit // 限制类
	UsingVisitLimit bool       // 启用限制
	// 超时
	TimeoutDetection bool  // 超时检测
	TimeoutMin       int64 // 最小超时时间
	TimeoutMax       int64 // 最大超时时间
	// 跨域设置
	CrossDomain bool
}

// Handle 路由接口
//	注:
//		路由接口的主类型
//		Routing 函数返回的 Routing 类型会被调度中的主判定进行参数判定
//		ServeHTTP 路由的处理过程 如果 Routing 类型值 判定成功的话会转交由ServeHTTP实现代码进行后期的处理
type Handle interface {
	// 路由信息
	Routing() *Routing
	// 处理过程
	ServeHTTP(w http.ResponseWriter, r *http.Request)
}

// VisitLimit 限制接口
// 	注: 限制类 具体实现参考 visitLimit 包实现
type VisitLimit interface {
	Init()
	LimitCondition(ip string, port string) (bool, func())
}
